﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Media;


//  The states namespace contains all the state classes
namespace States
{
    public abstract class BaseState
    {
        //  The content manager which the state can use to load resources
        protected ContentManager theContentManager;
        //  The sprite batch which the state can use to render images
        protected SpriteBatch theSpriteBatch;
        //  The device which the state can use for rendering
        protected GraphicsDevice theDevice;


        /// <summary>
        /// This function gets called when the application enters this state.
        /// You can use it to load any resources that this state will need.
        /// </summary>
        public abstract void Enter();
        /// <summary>
        /// This function gets called when the application exits this state.
        /// You can use it to unload any resources that this state loaded
        /// when it was entered.
        /// </summary>
        public abstract void Exit();
        /// <summary>
        /// This function gets called every update and checks for user input.
        /// </summary>
        /// <param name="ElapsedTime">The elapsed time
        /// Note: You can pass in (float)gameTime.ElapsedGameTime.TotalSeconds
        /// from the main game.
        /// </param>
        public abstract void GetInput(float ElapsedTime);
        /// <summary>
        /// This is the update phase of this state
        /// </summary>
        /// <param name="ElapsedTime"> The elapsed time
        /// Note: You can pass in (float)gameTime.ElapsedGameTime.TotalSeconds
        /// from the main game.</param>
        public abstract void Update(float ElapsedTime);
        /// <summary>
        /// This is the render phase of this state.
        /// </summary>
        /// <param name="ElapsedTime">The elapsed time
        ///  Note: You can pass in (float)gameTime.ElapsedGameTime.TotalSeconds
        /// from the main game.
        /// </param>
        public abstract void Render(float ElapsedTime);

    }
}
